import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.*;

@SuppressWarnings("serial")
public class MangHiir extends JPanel implements ActionListener {

	static int counter_combat = 0;
	public int testint;
	private JButton optionButton, newGameButton, optionButton2, newGameButton2;

	public boolean debug = false;
	private Tulemus tulemus;
	private MainPanel main_paneel;
	private GameOptionPanel option_panel;
	JScrollPane scrollPane;

	private JPanel buttonPanel, buttonPanel2, options_card, game_card;
	private JLabel main_text_Label;
	private Kyssad_vazzad_paneel questionPanel;
	private HTMLtekst output;

	public MangHiir() {

		this.setBackground(new Color(200, 200, 200));

		this.setLayout(new CardLayout());

		options_card = new JPanel(); // options card
		game_card = new JPanel(); // game card
		options_card.setLayout(new BorderLayout(3, 3));
		game_card.setLayout(new BorderLayout(3, 3));

		add_buttonpanel(); // lisame mõlemale ka nupupaneeli

		option_panel = new GameOptionPanel();
		main_paneel = new MainPanel();

		scrollPane = new JScrollPane(option_panel);

		options_card.add(scrollPane, BorderLayout.CENTER);
		game_card.add(main_paneel, BorderLayout.CENTER);
		this.add(options_card, "options");
		this.add(game_card, "game");

		setBorder(BorderFactory.createLineBorder(new Color(130, 50, 40), 3));
	} // end constructor

	public void add_buttonpanel() {
		buttonPanel = new JPanel();
		buttonPanel2 = new JPanel();
		buttonPanel.setBackground(new Color(220, 200, 180));
		buttonPanel2.setBackground(new Color(220, 200, 180));

		optionButton = new JButton("Seaded");
		optionButton.setActionCommand("Options");
		optionButton.setEnabled(true);
		optionButton.addActionListener(this);
		buttonPanel.add(optionButton);

		optionButton2 = new JButton("Seaded");
		optionButton2.setActionCommand("Options");
		optionButton2.setEnabled(true);
		optionButton2.addActionListener(this);
		buttonPanel2.add(optionButton2);

		newGameButton = new JButton("Uus Mäng");
		newGameButton.setActionCommand("New Game");
		newGameButton.addActionListener(this);
		buttonPanel.add(newGameButton);

		newGameButton2 = new JButton("Uus Mäng");
		newGameButton2.setActionCommand("New Game");
		newGameButton2.addActionListener(this);
		buttonPanel2.add(newGameButton2);

		game_card.add(buttonPanel, BorderLayout.NORTH);
		options_card.add(buttonPanel2, BorderLayout.NORTH);

	}

	/** Tagastatakse ikoon vĆµi "null", kui ei leitud sobivat faili */
	protected static ImageIcon createImageIcon(String asukoht) {
		File f = new File(asukoht);
		if (f.exists()) {
			return new ImageIcon(asukoht);
		} else {
			System.err.println("Ei leidnud faili: " + asukoht);
			return null;
		}
	}

	@Override
	public void actionPerformed(ActionEvent evt) {
		String command = evt.getActionCommand();
		
		taimerid_stoppida();
		
		if (command.equals("Options")) {
			setOptions();
		} else if (command.equals("New Game")) {
			doNewGame();
		} else {
			System.out.println("Unknown button command");
		}
		
	}
	
	public void taimerid_stoppida() {
		if (main_paneel!= null) {
			
			main_paneel.timer.stop();
			main_paneel.timerDeath.stop();
			main_paneel.timerEnnekysimist.stop();
			main_paneel.timerPihta.stop();
			main_paneel.timerRynne.stop();
		}
		
	}

	void doNewGame() {

		output.new_start("Uus mäng. ");

		// UUS kysimuste_database questionPaneeli jaoks
		Kysimused kysimuste_data = new Kysimused(true);
		

		if (option_panel.failinimi!="" ) {
			kysimuste_data = kysimuste_data
			.loeXML_data(option_panel.failinimi, kysimuste_data);
		}
		questionPanel.kysimuste_database = kysimuste_data;

		Loomad uusLoomad = new Loomad ();
		Loomad optionLoomad = option_panel.getLoomad();
		int mitu_looma = option_panel.gettegelasteArv();	
			
		for (int i = 0; i < mitu_looma; i++) {
			Loom newLoom = new Loom();
			newLoom.copy_loom(optionLoomad.loomad.get(i));
			newLoom.nimi = option_panel.leibelid.get(option_panel.gettegelasteArv()).get(i).getText();
			uusLoomad.addNewLoom(newLoom);
		}
		
		main_paneel.game.startNewGameWith(uusLoomad);
		

		main_paneel.preCombat();
		main_paneel.shadowlist_counter = 0;
		main_paneel.combatRound();
		((CardLayout) getLayout()).show(this, "game");
		
		 CardLayout cl = (CardLayout)(main_paneel.getLayout());
		    cl.show(main_paneel, "Variant2");

	} // end newGame();

	void setOptions() {

		((CardLayout) getLayout()).show(this, "options");

		repaint();
	}

	/**
	 * A nested class that displays the game and does all the work of keeping
	 * track of the state and responding to user events.
	 */
	private class MainPanel extends JPanel implements ActionListener,
			MouseListener, MouseMotionListener, ComponentListener {

		public Game game = new Game();
		public int shadowlist[];
		public int shadowlist_counter;
		
		int slowtime, rynde_anim_time, pihta_anim_time, death_anim_time, enne_kys_time = 1;
		Timer timer, timerRynne, timerPihta, timerEnnekysimist, timerDeath;
		boolean aktiivse_mangija_vilkumise_varvimine = false;
	
		public int gameOption;
		boolean kysimuste_vastuste_paneeli_edasi_nupp_juba_listenitud;
		Kysimused kysimuste_database;
		GamePanel kolli_paneel, kolli_paneel2;

		MainPanel() {

			setLayout(new CardLayout());

			kolli_paneel = new GamePanel();
			kolli_paneel2 = new GamePanel();

			kysimuste_vastuste_paneeli_edasi_nupp_juba_listenitud = false;
			
			timer = new Timer(100, new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					
					boolean vilgu = false;
					
					slowtime += 1;
					if (slowtime > 5) {
						vilgu = true;
						slowtime = 1;
						
					}	
					
					if (vilgu) {
						if (aktiivse_mangija_vilkumise_varvimine) {
							// System.out.println("Värvimine välja");
							aktiivse_mangija_vilkumise_varvimine= false;
						} else {
							// System.out.println("Värvimine sisse");
							aktiivse_mangija_vilkumise_varvimine= true;
						}
						vilgu = false;
						kolli_paneel.repaint();
						kolli_paneel2.repaint();
					}
					
				}
			});
			
			timerRynne = new Timer(40, new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					
					rynde_anim_time += 1;
					kolli_paneel.repaint();
					kolli_paneel2.repaint();
					if (rynde_anim_time > 20) {
						
						timerRynne.stop();
						rynde_anim_time = 1;
						Loom ohver = game.loomad.find_loom_by_id(tulemus.getTargeti_id());	
						// System.out.println("Lahutame elusid " + ohver.nimi +"-lt");
						elude_lahutamine(ohver, tulemus.getHammustus_tugevus());
						timerPihta.start();
					}	
					
				}
			});
			timerPihta = new Timer(40, new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					//TODO
					//TODO
					//TODO
					pihta_anim_time += 1;
					kolli_paneel.repaint();
					kolli_paneel2.repaint();
					if (pihta_anim_time > 20) {
						
						timerPihta.stop();
						pihta_anim_time = 1;
						
						Loom ohver = game.loomad.find_loom_by_id(tulemus.getTargeti_id());			
						checki_suremist(ohver);
								
					}	
					
				}
			});
			
			timerEnnekysimist = new Timer(300, new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					
					enne_kys_time += 1;
					// System.out.println("enne_kys_time:" + enne_kys_time);
					if (enne_kys_time > 5) {
						
						timerEnnekysimist.stop();
						enne_kys_time = 1;
						questionPanel.fortsykkel();
						if (!kysimuste_vastuste_paneeli_edasi_nupp_juba_listenitud) {
							questionPanel.j2rgmine.addActionListener(main_paneel);
							kysimuste_vastuste_paneeli_edasi_nupp_juba_listenitud = false;
						}
						 CardLayout cl = (CardLayout)(main_paneel.getLayout());
						    cl.show(main_paneel, "Variant1");
							
					}	
					
				}
			});
			
			timerDeath = new Timer(40, new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					
					death_anim_time += 1;
					kolli_paneel.repaint();
					kolli_paneel2.repaint();
					// System.out.println("enne_kys_time:" + enne_kys_time);
					if (death_anim_time > 40) {
						
						timerDeath.stop();
						death_anim_time = 1;
						Loom ohver = game.loomad.find_loom_by_id(tulemus.getTargeti_id());			
						game.loomad.loomad.remove(ohver);
						combatRound();
							
					}	
					
				}
			});
			
			JPanel variant1 = new JPanel(); // variant siis et on näha kollid, logi? ja küsimused_vastused
			variant1.setLayout(new BorderLayout());
			variant1.add(kolli_paneel, BorderLayout.CENTER);
		

			output = new HTMLtekst();
			kysimuste_database = new Kysimused(true);
			questionPanel = new Kyssad_vazzad_paneel(kysimuste_database, true);
			questionPanel.setBackground(new Color(170, 200, 180));
			variant1.add(questionPanel, BorderLayout.SOUTH);

			JPanel variant2 = new JPanel(); // variant2, siis et on näha kollid ja logi tekst
			variant2.setLayout(new BorderLayout());
			variant2.add(kolli_paneel2, BorderLayout.CENTER);
			
			Font bigBoldFont = new Font("Arial Unicode MS", Font.BOLD, 30); // mingi defaultsuurusega
			
			if (main_text_Label == null) {
				main_text_Label = new JLabel("Mingi tekst");
			} else {
				main_text_Label.setText("Mingi tekst");
			}
			main_text_Label.setFont(bigBoldFont);
			variant2.add(main_text_Label, BorderLayout.SOUTH);
			this.add(variant1, "Variant1");
			this.add(variant2, "Variant2");

			this.addComponentListener(this);
			this.addMouseListener(this);
			this.addMouseMotionListener(this);
			repaint();
		} // end constructor

		private class GamePanel extends JPanel {
			
			GamePanel() {
				// Consturctor
				
			
				
			} // End constructor


			public void paintComponent(Graphics g) {
				// System.out.println("GamePaneli Paintcomponent laks kaima");
				display_targets(g, this);

			}
		}

		public void actionPerformed(ActionEvent evt) {
			String command = evt.getActionCommand();

			button_decoder(command);

		}

		void button_decoder(String command) {

			if (command.contains("6ige, j2rgmine!")
					|| command.contains("Vale :(  Kliki siia, et minna edasi")) {
				// System.out.println("Kysimus vastatud");
				tulemus.setKysimysVastatud(true);
				//System.out.println("Ryndamine pärast küsimusele vastamist laks kaima");
				((CardLayout) getLayout()).show(this, "Variant2");
				ryndamine();
			} else {

			}
		}


		private void preCombat() {
			shadowlist_counter = 0;
			shadowlist = new int[game.loomad.loomad.size()];
			for (int i = 0; i < shadowlist.length; i++) {
				shadowlist[i] = game.loomad.loomad.get(i).ID;
			}
		}

		private boolean check_for_all_in_same_team() {
			int old_team = -1;
			int new_team;
			for (int i = 0; i < game.loomad.loomad.size(); i++) {
				if (i == 0)
					old_team = game.loomad.loomad.get(i).team;
				new_team = game.loomad.loomad.get(i).team;
				if (old_team != new_team) {
					return false;
				}
			}
			return true;
		}

		private void combatRound() {
			// System.out.println("Combatround" + counter_combat++);
			if (check_for_all_in_same_team()) {
				declareWinners();
				return;
			}

			boolean kas_on_elus = false;
			tulemus = new Tulemus();

			if (game.loomad.find_loom_by_id(shadowlist[shadowlist_counter]) != null) {
				// kontrollime kas ryndaja on elus ja terve

				tulemus.setRyndeLoom(game.loomad
						.find_loom_by_id(shadowlist[shadowlist_counter]));
				kas_on_elus = true;
			}

			if (kas_on_elus == true) {

				tulemus.setSkip_this_player(false); 
				// tegelt on
				// nakuinii vaja leida nüüd talle sobiv ohver, ehk teeme
				// ohvrite listi,
				// kõikidest kes pole samas teamis ja ta enda ka jätame ka
				// välja

				tulemus.setOhvrid(game.loomad.find_legal_targets_for_loom(
						tulemus.getRyndeLoom().ID, gameOption));
				if (tulemus.getOhvrid().length > 0) {
					if (tulemus.getRyndeLoom().is_AI == true) {
						// Sobilike ohvrite nimekiri on nüüd olemas
						// AI Moment valib randomiga võimalike ohvrite
						// nimekirjast positsiooni
						tulemus.setTargeti_id(tulemus.getOhvrid()[(int) (Math
								.random() * tulemus.getOhvrid().length)]);
					} else {
						// loom ei ole AI, vaid player
						output.newline();
						output
								.add_tekst("  Tere "
										+ tulemus.getRyndeLoom().nimi
										+ "! Vali keda sa ründad!");
						main_text_Label.setText(output.getTekst());
						tulemus.setPlayer_targeting(true);
						timer.start();
					}
				} else {
					output.add_tekst(tulemus.getRyndeLoom().nimi
							+ ", You have no targets");
					main_text_Label.setText(output.getTekst());
					tulemus.setSkip_this_player(true);
				} // end else if (ohvrid.length > 0) {
			} else
				tulemus.setSkip_this_player(true);
			// end else if (kas_on_elus)
			vahepala();
		} // end combatround

		public void vahepala() {
			if (tulemus.isPlayer_targeting()) {
				// display_targets(false);
				return;
			}
			shadowlist_counter++;
			if (shadowlist_counter >= shadowlist.length) {
				preCombat(); // teeme uue shadowlisti
			}

			if (tulemus.getTargeti_id() > -1) {

				ryndamine();
				return;
			}
			if (tulemus.isSkip_this_player()) {
				// do next combat round

				combatRound();
			}
		} // end vahepala

		public void declareWinners() {
			if (game.loomad.loomad.size() == 1) {

				output
						.add_tekst(" Võitja on "
								+ game.loomad.loomad.get(0).nimi);
				if (game.loomad.loomad.get(0).is_AI == true) {

					output.add_tekst(" (AI player)");
				} else {
					output.add_tekst(" (human player)");
				}
				main_text_Label.setText(output.getTekst());

			} else {
				output.add_tekst(" Võitjad on: ");

				for (int playeri_ohver = 0; playeri_ohver < game.loomad.loomad
						.size(); playeri_ohver++) {

					output.add_tekst(" "
							+ game.loomad.loomad.get(playeri_ohver).nimi);
				}
				main_text_Label.setText(output.getTekst());

			} // end else if if (game.loomad.loomad.size() == 1) {
		}

		public boolean check_ohver(Loom loom, int ohvrid[]) {

			for (int playeri_ohver = 0; playeri_ohver < ohvrid.length; playeri_ohver++) {

				if (loom.ID == ohvrid[playeri_ohver])
					return true;

			}
			return false;
		}

		public void ryndamine() {


			if (tulemus.isKysimysVastatud()) {
				System.out.println("questionpanel.protsentarv" + questionPanel.vastuse_protsent);
				double vahemuutuja = (double) (tulemus.getRyndeLoom().dam1 * ((100.0 - questionPanel.vastuse_protsent) / 100.0));
				//TODO
				//TODO
				//TODO mingi jama dammidega, bugine arvestus
				output.new_start(" Arvestades su " + (int) questionPanel.vastuse_protsent
						+ "% vastust, ryndaja hammustusest("
						+ tulemus.getRyndeLoom().dam1 + ") on alles "
						+ vahemuutuja + " dammu, ehk ");
				output.newline();

				tulemus.setHammustus_tugevus((int) (vahemuutuja));
				// System.out.println("hammustus_tugevus =" + tulemus.getHammustus_tugevus());
			} else {
				tulemus.setHammustus_tugevus(tulemus.getRyndeLoom().dam1
						+ (int) (Math.random() * (tulemus.getRyndeLoom().dam2 - tulemus
								.getRyndeLoom().dam1))) ;
			}
			output.add_tekst(tulemus.getRyndeLoom().nimi);

		
				
				Loom ohver = game.loomad.find_loom_by_id(tulemus.getTargeti_id());
				
				if (ohver == null ) {
					// System.out.println("ohver seest tühi, id" + tulemus.getTargeti_id());
				} else {
					
					if (!ohver.is_AI) {
						// inimest rünnatakse
						if (!tulemus.isKysimysVastatud()) {
							vasta_kysimusele(ohver);
						} else {
							stop_targeting();
							elude_lahutamise_tekst(ohver, tulemus.getHammustus_tugevus());
							timerRynne.start();
							//TODO
							//TODO
							//TODO
						}

					} else {
						stop_targeting();
						elude_lahutamise_tekst(ohver, tulemus.getHammustus_tugevus());
						timerRynne.start();
					}
				} // end else if (ohver == null ) {
				
			
				
			
			
		} // end ryndamine
		
		public void stop_targeting() {
			if (timer.isRunning()) timer.stop();
			
		}
		
		public void vasta_kysimusele(Loom ohver) {

			output.add_tekst(" ründab sind. Vasta küsimusele, " + ohver.nimi);
			output.newline();
			main_text_Label.setText(output.getTekst());
			// System.out.println("Fortsykkel kaima");
			timer.start();
			timerEnnekysimist.start();
		
			this.repaint();
		}

		public void elude_lahutamise_tekst(Loom ohver, int hammustus_tugevus) {

			output.add_tekst(" hammustab, " + ohver.nimi + " kaotab "
					+ hammustus_tugevus + " elu.");
			
			main_text_Label.setText(output.getTekst());
			output.new_start("");
		
		}
		
		public void elude_lahutamine(Loom ohver, int hammustus_tugevus) {

			ohver.elupunktid = ohver.elupunktid - hammustus_tugevus;
		}
		
		public void checki_suremist(Loom ohver) {
			
			if (ohver.elupunktid <= 0) {
				output.new_start(ohver.nimi + " suri ära !");
				main_text_Label.setText(output.getTekst());
				output.new_start("");
				timerDeath.start();
				
			} else {
				combatRound();
			} // end if else (ohver.elupunktid <= 0) {
			
		}

		public Color get_suitable_hp_color(int looma_id) {
			Color vastus = Color.GREEN;
			Loom test_loom = game.loomad.find_loom_by_id(looma_id);
			if (test_loom.elupunktid < test_loom.max_elupunktid) {
				vastus = Color.YELLOW;
			}

			if (test_loom.elupunktid < test_loom.max_elupunktid / 2) {

				vastus = Color.ORANGE;
			}

			if (test_loom.elupunktid < test_loom.max_elupunktid / 4) {

				vastus = Color.RED;
			}
			return vastus;
		}

		public void display_hp(int looma_id, Color color,
				int x_cord, int y_cord, int width, int height, Graphics g, int suurus ) {

			Loom test_loom = game.loomad.find_loom_by_id(looma_id);
			g.setColor(color);
			g.fillRect(x_cord, y_cord + height, width, suurus);
			
			Font bigBoldFont = new Font("SansSerif", Font.ITALIC, (int) (suurus * 0.8));
			g.setFont(bigBoldFont);
			g.setColor(Color.BLACK);
			String display_string = "HP (" + test_loom.elupunktid + "/" + test_loom.max_elupunktid + ")";
			g.drawString(display_string, x_cord , y_cord + height + (int) (suurus * 0.8));

		}

		public ImageIcon display_loom(int button_nr, int looma_id) {

			Loom test_loom = game.loomad.find_loom_by_id(looma_id);

			ImageIcon img = null;
			try {
				img = Ikoonilaadija.annaIkoon("loomad_indrek/"
						+ test_loom.getType() + ".gif");
			} catch (Exception e) {
			}

			return img;

		} // end display_loom

		public void display_targets(Graphics g, JPanel paneel) {

			int w = paneel.getWidth();
			int h = paneel.getHeight();
			g.setColor(Color.white);
			g.fillRect(0, 0, w, h);
			double algne_pildikyrgus = 450; //pildifaili suurus Y
			double algne_pildilaius = 300; //pildifaili suurus X
			double hp_bari_paksuse_suhe_pildikyrgusesse = 0.15;
			double piltide_vahelise_vahe_suhe_pildilaiusega = 0.1;
			
			double pildi_vahe = algne_pildilaius * piltide_vahelise_vahe_suhe_pildilaiusega;
			double hp_bari_suurus = algne_pildikyrgus * hp_bari_paksuse_suhe_pildikyrgusesse;
			
			double algne_modifitseeritud_pildikyrgus = algne_pildikyrgus + pildi_vahe + hp_bari_suurus;
			double algne_modifitseeritud_pildilaius = algne_pildilaius + pildi_vahe; 
			double pildikyrgus = algne_pildikyrgus;
			double pildilaius = algne_pildilaius;
			double modifitseeritud_pildikyrgus =  algne_modifitseeritud_pildikyrgus;
			double modifitseeritud_pildilaius = algne_modifitseeritud_pildilaius;
			
			int loomade_arv = game.loomad.loomad.size();

			double suhe_kyrgus = h / pildikyrgus;
			double suhe_laius = w / pildilaius;

			// kuna esialgu muudmoodi ei oska, siis hakkan pilte vĆ¤hendama kuni
			// nad Ć¤ra mahuvad

			boolean ok_korras = false;

			do {

				suhe_kyrgus = h / modifitseeritud_pildikyrgus;
				suhe_laius = w / modifitseeritud_pildilaius;
				if ((int) suhe_kyrgus * (int) suhe_laius > loomade_arv) {

					ok_korras = true;
				} else {
					modifitseeritud_pildikyrgus = modifitseeritud_pildikyrgus * 0.9;
					modifitseeritud_pildilaius= modifitseeritud_pildilaius * 0.9;
					pildikyrgus = pildikyrgus * 0.9;
					pildilaius = pildilaius * 0.9;
				}

			} while (!ok_korras);

			int piltide_vaheline_vahe = (int) (pildilaius * piltide_vahelise_vahe_suhe_pildilaiusega);
			int hp_bari_paksus = (int) (pildikyrgus * hp_bari_paksuse_suhe_pildikyrgusesse);
			// System.out.println(" Suhe kyrgus:" + suhe_kyrgus +
			// " Suhe laius: " + suhe_laius);

			int x_coord = 0;
			int y_coord = 0;

			for (int playeri_ohver = 0; playeri_ohver < loomade_arv; playeri_ohver++) {

				

				// / pildid on meil moment suuruses 300x450 ehk mĆµĆµtkavas
				// 1:1.5
				Loom painditav_loom = game.loomad.loomad.get(playeri_ohver);
				ImageIcon img = display_loom(playeri_ohver, painditav_loom.ID);
				
				painditav_loom.setCords(x_coord,
						y_coord, x_coord + (int) pildilaius,
						y_coord + (int) pildikyrgus);
				
				if (timer.isRunning()) {
					
						if (painditav_loom.ID == tulemus.getRyndeLoom().ID || painditav_loom.ID == tulemus.getTargeti_id()) {
							
						
							
									if (aktiivse_mangija_vilkumise_varvimine) {
											
											if (tulemus.getTargeti_id() == -1) { // järelikult vaid mängijalt küsitakse keda rünnata
												g.setColor(new Color(127, 255, 212));
											} else { // target eksisteerib
												if (painditav_loom.ID == tulemus.getTargeti_id()) {
													g.setColor(new Color(127, 255, 212));
												}
												if (painditav_loom.ID == tulemus.getRyndeLoom().ID) {
													g.setColor(Color.orange);
												}
												
											}
										
										
									} else {
										
											if (tulemus.getTargeti_id() == -1) { // järelikult vaid mängijalt küsitakse keda rünnata
												g.setColor(new Color(182, 251, 182));
											} else { // target eksisteerib
												if (painditav_loom.ID == tulemus.getTargeti_id()) {
													g.setColor(new Color(182, 251, 182));
												}
												if (painditav_loom.ID == tulemus.getRyndeLoom().ID) {
													g.setColor(Color.yellow);
												}	
												
											}
									} // end else if (aktiivse_mangija_vilkumise_varvimine) {
							
							g.fillRect( x_coord, y_coord, (int) pildilaius,  (int) pildikyrgus);
						} // end if (painditav_loom.ID == tulemus.getRyndeLoom().ID || painditav_loom.ID == tulemus.getTargeti_id()) {
				
				} // end if (timer.isRunning()) {	
				
				g.drawImage(img.getImage(), x_coord, y_coord, x_coord
						+ (int) pildilaius, y_coord + (int) pildikyrgus, 0, 0,
						300, 450, null);
				
				display_hp(
						painditav_loom.ID,
						get_suitable_hp_color(painditav_loom.ID),x_coord,  y_coord, (int) pildilaius, (int) pildikyrgus  , g, hp_bari_paksus );

				x_coord = x_coord + (int) pildilaius + piltide_vaheline_vahe;

				if (x_coord > (w - (int) pildilaius)) {
					x_coord = 0; // kui ei mahu enam, siis uus rida
					y_coord = y_coord + (int) pildikyrgus + piltide_vaheline_vahe;
				}

			} // end for (int playeri_ohver = 0; playeri_ohver <
			
			if (timerRynne.isRunning()) {
				// System.out.println("rynde_anim_time:" + rynde_anim_time);
				Loom ryndeloom = tulemus.getRyndeLoom();
				Loom ohver = game.loomad.find_loom_by_id(tulemus.getTargeti_id());
				Font bigBoldFont = new Font("Arial Unicode MS", Font.BOLD, (int) (pildikyrgus/5));
				g.setFont(bigBoldFont);
				g.setColor(Color.black);
				int ryndaja_x = ryndeloom.getxStart()+ (int) (pildilaius / 3);
				int ohver_x = ohver.getxStart()+ (int) (pildilaius / 3);
				int ryndaja_y = ryndeloom.getyStart()+ (int) (pildikyrgus / 2);
				int ohver_y= ohver.getyStart()+ (int) (pildikyrgus / 2);
				int x = arvuta_kordinaat(ryndaja_x , ohver_x);
				int y = arvuta_kordinaat(ryndaja_y , ohver_y);
				g.drawString("???",x, y);
			}
			
			if (timerPihta.isRunning()) {
				// System.out.println("pihta_anim_time:" + pihta_anim_time);
				g.setColor(Color.red);
				Loom ohver = game.loomad.find_loom_by_id(tulemus.getTargeti_id());
				Font bigBoldFont = new Font("Arial Unicode MS", Font.BOLD, (int) ((pildikyrgus/10) + pildikyrgus/100 * pihta_anim_time));
				g.setFont(bigBoldFont);
				int ohver_x = ohver.getxStart()+ (int) (pildilaius / 3);
				int ohver_y= ohver.getyStart()+ (int) (pildikyrgus / 2);
				g.drawString("" + tulemus.getHammustus_tugevus(),ohver_x, ohver_y);
			}
			if (timerDeath.isRunning()) {
				// System.out.println("pihta_anim_time:" + pihta_anim_time);
				g.setColor(Color.white);
				Loom ohver = game.loomad.find_loom_by_id(tulemus.getTargeti_id());
				//TODO
				//TODO
				// teeme platsi valgeks
				g.fillRect(ohver.getxStart(), ohver.getyStart(), (int)pildilaius,(int) pildikyrgus);
				// joonistame ühe ilusa maa seest kerkiva suremise risti
				g.setColor(Color.black);
				
				int seiskuv_rist = 0;
				if (death_anim_time < 30 ) {
					seiskuv_rist = death_anim_time;
				} else {
					seiskuv_rist = 30;
				}
				
				
				
				
				int laius_start = ohver.getxStart()+(int)(pildilaius /10 * 4);
				int kyrgus_start = ohver.getyStart()+(int)(pildikyrgus-(pildikyrgus/ 40 * seiskuv_rist));
				int laius_rist_yles =  (int)(pildilaius /10 * 2);
				int kyrgus_rist_yles = (int)(pildikyrgus / 40 * seiskuv_rist);
				g.fillRect(laius_start, kyrgus_start, laius_rist_yles,kyrgus_rist_yles);
				if (seiskuv_rist > 10) {
					laius_start = ohver.getxStart();
					kyrgus_start = ohver.getyStart()+(int)(pildikyrgus-(pildikyrgus/ 40 * (seiskuv_rist-10)));
					int laius_rist_risti = (int)(pildilaius);
					int kyrgus_rist_risti =Math.min((int)(pildikyrgus/ 40 * (seiskuv_rist-10)),(int) (pildikyrgus/ 10));
					g.fillRect(laius_start, kyrgus_start, laius_rist_risti,kyrgus_rist_risti);
				}
			}
			
		} // end display_targets
		public int arvuta_kordinaat( int algus , int lypp) {
			double teepikkus = lypp -  algus;
			teepikkus = teepikkus / (20) * rynde_anim_time;
			return (int) (algus + teepikkus);
		}
		@Override
		public void mouseClicked(MouseEvent evt) {
			// System.out.println("Mouse clicked");
			int x_clicked = evt.getX(); // x-coordinate where user clicked.
			int y_clicked = evt.getY();

			Loom target = game.loomad.find_loom_by_coords(x_clicked, y_clicked);
			output.new_start("");
			if (target == null) {
				// System.out.println("Klikkis mööda");

			} else {
				if (tulemus.isPlayer_targeting()) {

					// System.out.println("Player is targeting");
					// kontrollime kas target on legaalne
					if (check_ohver(target, tulemus.getOhvrid())) {
						shadowlist_counter++;

						if (shadowlist_counter >= shadowlist.length) { // shadowlisti
							preCombat(); // teeme uue shadowlisti
						}
						tulemus.setTargeti_id(target.ID);
						
					} else {
						if (tulemus.getRyndeLoom().team == target.team) {
							if (tulemus.getRyndeLoom().ID == target.ID) {
								output.new_start("Ennast rynnata ei maksa, "
										+ target.nimi);
								main_text_Label.setText(output.getTekst());
			
							} else {
								output.new_start(target.nimi
										+ " on samas teamis");
								main_text_Label.setText(output.getTekst());
							
							}
						} else {
							output.new_start(target.nimi
									+ "on liiga kaugel sinust");
							main_text_Label.setText(output.getTekst());
							
						}
						// System.out.println ("Mittelegaalne target");
						tulemus.setTargeti_id(-1);
					}
				} else {
					// System.out.println("Player is not targeting");
					// TODO siin vĆµiks vast rohkem infot anda kui ta playereid
					// uurib
					output.new_start("See on " + target.nimi);
					main_text_Label.setText(output.getTekst());
				

				} // end else if (tulemus.isPlayer_targeting()) {

				if (tulemus.isPlayer_targeting()) {
					if (tulemus.getTargeti_id() != -1) {
						tulemus.setPlayer_targeting(false);
						// System.out.println("Ryndamine laks kaima");
						ryndamine();
					}
				}
			} // end else if (target == null)

		}

		public void mouseEntered(MouseEvent arg0) {
		}

		@Override
		public void mouseExited(MouseEvent evt) {
		}

		public void mousePressed(MouseEvent evt) {

		}

		@Override
		public void mouseReleased(MouseEvent evt) {

		}

		@Override
		public void mouseDragged(MouseEvent evt) {

		}

		@Override
		public void mouseMoved(MouseEvent evt) {
		}

		@Override
		public void componentHidden(ComponentEvent arg0) {
		}

		@Override
		public void componentMoved(ComponentEvent arg0) {
		}

		@Override
		public void componentResized(ComponentEvent arg0) {
			// removeButtons();
			repaint();
		}

		@Override
		public void componentShown(ComponentEvent arg0) {
		}

	} // end nested class MainPanel

} // end class MangHiir
